package com.uls.web.controller.questionnaire;

import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;
import com.uls.common.core.domain.entity.SysUser;
import com.uls.framework.config.MinioProp;
import com.uls.framework.utils.MinioUtils;
import com.uls.questionnaire.domain.ZxhQuestion;
import com.uls.questionnaire.service.IZxhQuestionService;
import com.uls.questionnaire.vo.QuestionnaireVO;
import com.uls.questionnaire.vo.QuestionnaireViewVO;
import org.joda.time.DateTime;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.uls.common.annotation.Log;
import com.uls.common.core.controller.BaseController;
import com.uls.common.core.domain.AjaxResult;
import com.uls.common.enums.BusinessType;
import com.uls.questionnaire.domain.ZxhQuestionnaire;
import com.uls.questionnaire.service.IZxhQuestionnaireService;
import com.uls.common.utils.poi.ExcelUtil;
import com.uls.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;



/**
 * 问卷信息Controller
 * 
 * @author zxh
 * @date 2024-10-31
 */
@RestController
@RequestMapping("/questionnaire/questionnaire")
public class ZxhQuestionnaireController extends BaseController
{
    @Autowired
    private IZxhQuestionnaireService zxhQuestionnaireService;

    @Autowired
    private IZxhQuestionService zxhQuestionService;
    @Autowired
    private IZxhQuestionnaireService questionnaireService;

    @Autowired
    private MinioUtils minioUtils;

    @Autowired
    private MinioProp minioProp;

    /**
     * 查询问卷信息列表
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:list')")
    @GetMapping("/list")
    public TableDataInfo list(ZxhQuestionnaire zxhQuestionnaire)
    {
        startPage();
        List<ZxhQuestionnaire> list = zxhQuestionnaireService.selectZxhQuestionnaireList(zxhQuestionnaire);
        return getDataTable(list);
    }

    /**
     * 导出问卷信息列表
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:export')")
    @Log(title = "问卷信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ZxhQuestionnaire zxhQuestionnaire)
    {
        List<ZxhQuestionnaire> list = zxhQuestionnaireService.selectZxhQuestionnaireList(zxhQuestionnaire);
        ExcelUtil<ZxhQuestionnaire> util = new ExcelUtil<ZxhQuestionnaire>(ZxhQuestionnaire.class);
        util.exportExcel(response, list, "问卷信息数据");
    }

    /**
     * 获取问卷信息详细信息
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:query')")
    @GetMapping(value = "/{questionnaireId}")
    public AjaxResult getInfo(@PathVariable("questionnaireId") Long questionnaireId)
    {
        return success(zxhQuestionnaireService.selectZxhQuestionnaireByQuestionnaireId(questionnaireId));
    }

    /**
     * 新增问卷信息
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:add')")
    @Log(title = "问卷信息", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ZxhQuestionnaire zxhQuestionnaire)
    {

        SysUser user = this.getLoginUser().getUser();
        zxhQuestionnaire.setCreateBy(user.getUserName());
        return toAjax(zxhQuestionnaireService.insertZxhQuestionnaire(zxhQuestionnaire));
    }

    /**
     * 修改问卷信息
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:edit')")
    @Log(title = "问卷信息", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ZxhQuestionnaire zxhQuestionnaire)
    {
        SysUser user = this.getLoginUser().getUser();
        zxhQuestionnaire.setCreateBy(user.getUserName());
        zxhQuestionnaire.setUpdatedTime(new Date());
        return toAjax(zxhQuestionnaireService.updateZxhQuestionnaire(zxhQuestionnaire));
    }

    /**
     * 删除问卷信息
     */
    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:remove')")
    @Log(title = "问卷信息", businessType = BusinessType.DELETE)
	@DeleteMapping("/{questionnaireIds}")
    public AjaxResult remove(@PathVariable Long[] questionnaireIds)
    {
        return toAjax(zxhQuestionnaireService.deleteZxhQuestionnaireByQuestionnaireIds(questionnaireIds));
    }



     @GetMapping("/{id}/details")
      public List<QuestionnaireViewVO> getQuestionnaireDetails(@PathVariable("id") Long questionnaireId)
     {
         List<QuestionnaireViewVO> details = questionnaireService.getQuestionnaireDetails(questionnaireId);
         System.out.println("Questionnaire Details: " + details);
         return details;
    }
    @PostMapping("/uploadMinio")
    public String uploadMinio(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
        JSONObject res = null;
        try {
            res = minioUtils.uploadFile(file, minioProp.getBucket());
        } catch (Exception e) {
            e.printStackTrace();
            res.put("code", 0);
            res.put("msg", "上传失败");
        }
        return res.toJSONString();
    }


    @GetMapping("/listvo")
    @PreAuthorize("@ss.hasPermi('questionnaires:questionnaires:questionnairesvo')")
    public TableDataInfo getAllQuestionnaires() {
        // 开始分页
        startPage();

        // 获取所有问卷列表
        List<QuestionnaireVO> questionnaires = questionnaireService.getAllQuestionnaires();

        // 打印日志
        for (QuestionnaireVO questionnaireVO : questionnaires) {
            System.out.println(questionnaireVO);
        }

        // 将结果封装成 TableDataInfo 并返回
        return getDataTable(questionnaires);
    }
 /*   public ResponseEntity<List<QuestionnaireVO>> getAllQuestionnaires() {
        List<QuestionnaireVO> questionnaires = questionnaireService.getAllQuestionnaires();
        for(QuestionnaireVO questionnaireVO:questionnaires)
        {
            System.out.println(questionnaireVO);
        }
        return ResponseEntity.ok(questionnaires);
    }*/




    @PreAuthorize("@ss.hasPermi('questionnaires:questionnaires:questionnairesSubmit')")
    @Log(title = "问卷信息", businessType = BusinessType.EXPORT)
    @GetMapping("/submitquestionnaire/{questionnaireId}")
    public AjaxResult submitStudent(@PathVariable Long questionnaireId)
    {
        return  toAjax(questionnaireService.submit(questionnaireId,getUserId()));
    }


    @PreAuthorize("@ss.hasPermi('questionnaires:questionnaires:listNo')")
    @GetMapping("/listNo")
    public TableDataInfo listNo(ZxhQuestionnaire questionnaire)
    {
        startPage();
        List<ZxhQuestionnaire> list = questionnaireService.noFinishTask(getUserId(),"mySurvey0");
       //List<ZxhQuestionnaire> list = questionnaireService.noFinishTask(getUserId(),"mySurvey",questionnaire);//关联工作流带条件查询
        for(ZxhQuestionnaire zxhQuestionnaire:list)
        {
            System.out.println(zxhQuestionnaire);
        }
        return getDataTable(list);
    }




    @GetMapping(value = "/getQuestionnaireComment/{questionnaireId}")
    public AjaxResult getInfoComment(@PathVariable("questionnaireId") Long questionnaireId)
    {
       ZxhQuestionnaire questionnaire=questionnaireService.selectZxhQuestionnaireByQuestionnaireId(questionnaireId);

        questionnaire.setTaskCommentVoList(questionnaireService.getTaskCommentList(questionnaire.getFlowInstantId()));  //找出前面审批人的审批信息

        return success(questionnaire);
    }

    @PreAuthorize("@ss.hasPermi('found:record:editnoapprove')")
    @Log(title = "查询未审批问卷信息列表", businessType = BusinessType.EXPORT)
    @PostMapping("/editnoapprove")
    public AjaxResult editSaveNoAuthData(@RequestBody ZxhQuestionnaire questionnaire)
    {
        questionnaireService.completeTask(questionnaire.getFlowInstantId(),questionnaire.getAgree(),getUserId(),questionnaire.getComment(),questionnaire.getQuestionnaireId());
        return  toAjax(200);
    }

    @PreAuthorize("@ss.hasPermi('questionnaire:questionnaire:listfinished')")
    @GetMapping("/listFinished")
    public TableDataInfo listFinished(ZxhQuestionnaire questionnaire)
    {
        startPage();
        List<ZxhQuestionnaire> list = questionnaireService.finishTask(getUserId(),"mySurvey0",questionnaire);//关联工作流带条件查询
        return getDataTable(list);
    }
}
